package com.example.demo.dao;

import com.example.demo.entity.pojo.AiAgent;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * AI Agent定义表(AiAgent)表数据库访问层
 *
 * @author makejava
 * @since 2025-07-13 18:30:30
 */
public interface AiAgentDao {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    AiAgent queryById(Integer id);

    /**
     * 查询用户可访问的Agent列表（包括公开的和自己创建的）
     *
     * @param userId 用户ID
     * @return Agent列表
     */
    List<AiAgent> queryAccessibleAgents(@Param("userId") String userId);

    /**
     * 查询用户创建的Agent列表
     *
     * @param creatorId 创建者ID
     * @return Agent列表
     */
    List<AiAgent> queryByCreatorId(@Param("creatorId") String creatorId);

    /**
     * 查询公开的Agent列表
     *
     * @return Agent列表
     */
    List<AiAgent> queryPublicAgents();

    /**
     * 根据状态查询Agent
     *
     * @param status 状态
     * @return Agent列表
     */
    List<AiAgent> queryByStatus(@Param("status") Integer status);

    /**
     * 搜索Agent（根据名称和描述）
     *
     * @param keyword 关键词
     * @param userId 用户ID（用于权限过滤）
     * @return Agent列表
     */
    List<AiAgent> searchAgents(@Param("keyword") String keyword, @Param("userId") String userId);

    /**
     * 新增数据
     *
     * @param aiAgent 实例对象
     * @return 影响行数
     */
    int insert(AiAgent aiAgent);

    /**
     * 修改数据
     *
     * @param aiAgent 实例对象
     * @return 影响行数
     */
    int update(AiAgent aiAgent);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteById(Integer id);

    /**
     * 统计用户创建的Agent数量
     *
     * @param creatorId 创建者ID
     * @return Agent数量
     */
    long countByCreatorId(@Param("creatorId") String creatorId);

    /**
     * 统计公开Agent数量
     *
     * @return Agent数量
     */
    long countPublicAgents();
}
